nAG Fortran コンパイラ 7.1 マニュアル

 
ナビゲーション:前へ   上へ   次へ

11.6 組込み手続きとモジュール

  • [6.2] 組み込みサブルーチンMOVE_ALLOCに、省略可能なSTATおよびERRMSG引数が追加されました。 STAT引数は、整数型で、小数点以下の範囲が4以上である必要があります(つまり、8ビット整数ではありません)。 サブルーチンが正常に実行された場合は値ゼロが割り当てられ、それ以外の場合はゼロ以外の値が割り当てられます。 ERRMSG引数は、基本種別の文字型である必要があります。 STATが存在し、ゼロ以外の値が割り当てられている場合、 ERRMSGには説明メッセージが割り当てられます(存在する場合)。 それ以外の場合、ERRMSGは以前の値(存在する場合)を保持します。

    例)

        INTEGER,ALLOCATABLE :: x(:),y(:)
        INTEGER istat
        CHARACTER(80) emsg
        ...
        CALL MOVE_ALLOC(x,y,istat,emsg)
        IF (istat/=0) THEN
          PRINT *,'Unexpected error in MOVE_ALLOC: ',TRIM(emsg)
    

    これらの引数の目的は、STAT_STOPPED_IMAGESTAT_FAILED_IMAGEなどの複数の像の共配列の割付け/割付け解除のエラーをキャッチすることです。

  • [7.1] 組込み関数ALLANYFINDLOCIALLIANYIPARITYMAXLOCMAXVALMINLOCMINVALNORM2PARITYPRODUCT、及びSUMDIM引数は実行時に存在する限り、省略可能な仮引数にすることができます。
    例)
      Subroutine sub(x,n)
        Real,Intent(In) :: x(:,:,:)
        Integer,Intent(In),Optional :: n
        If (Present(n)) Then
          Print *,Norm2(x,n) ! Rank two array result.
        Else
          Print *,Norm2(x)   ! Scalar result.
        End If
      End Subroutine
    
  • [7.1] 個別組込み関数は廃止されたと見なされます(-f2018オプションでそのように報告されます)。 個別でも総称でもある関数(例えばSQRT)の廃止された使用法は、 実引数として渡すか、手続引用仕様として使用するか、手続きポインタ割付け指示先となるかです。
  • [7.1] 組込照会関数RANKは、引数の次元を返します。 書式は次のとおりです。
    RANK ( A )
    

    A : 任意の型のデータ実体

    結果 : 基本種別のスカラ整数

    結果はAの次元数です。つまりAがスカラの場合はゼロ、Aが1次元配列の場合は1、等々。

    この関数は、Aが次元数引継ぎ変数である場合を除いて、定数式で使用できます。

  • [7.1] 組込み関数REDUCEは、ユーザー定義の配列集約を実行します。 書式は次のとおりです。
    REDUCE ( ARRAY, OPERATION [, MASK, IDENTITY, ORDERED ] ) or REDUCE ( ARRAY, OPERATION DIM [, MASK, IDENTITY, ORDERED ] )
    

    ARRAY:任意の型の配列

    OPERATION:2つの引数を持つ純粋関数。各引数は、ARRAYと同じ宣言型および型パラメータを持つ、スカラ、非割り付け可能、非ポインター、非多態性の非省略可能変数です。 一方の引数にASYNCHRONOUSTARGET、またはVALUE属性がある場合、もう一方にもその属性が必要です。 結果は、ARRAYと同じ型および型パラメーターを持つ非多相スカラ変数である必要があります。

    DIM:1からNの範囲のスカラ整数。ここでNARRAYの次元数です。

    MASK:論理型でARRAYと同じ形状のスカラまたは配列

    IDENTITYARRAYと同じ宣言された型と型パラメタを持つスカラ

    ORDERED:論理型のスカラ

    結果:ARRAYと同じ型および型パラメタ。

    結果は、ユーザー指定のOPERATIONによってARRAYが集約されます。 DIMが存在しない場合、(マスクされた)ARRAY全体がスカラ結果に集約されます。 DIMが存在する場合、結果の次元数はN-1になり、ARRAYの形状は次元DIMが集約されます。 結果の各要素は、その次元のマスクされた要素の集約です。

    正確に1つの要素が結果値に寄与する場合、その値は要素と等しくなります。つまり、OPERATIONは、複数の要素が表示された場合にのみ呼び出されます。

    結果値に寄与する要素がない場合は、IDENTITY引数が存在する必要があり、その値はIDENTITYと同じです。

    例)

    Module triplet_m
      Type triplet
        Integer i,j,k
      End Type
    Contains
      Pure Type(triplet) Function tadd(a,b)
        Type(triplet),Intent(In) :: a,b
        tadd%i = a%i + b%i
        tadd%j = a%j + b%j
        tadd%k = a%k + b%k
      End Function
    End Module
    Program reduce_example
      Use triplet_m
      Type(triplet) a(2,3)
      a = Reshape( [ triplet(1,2,3),triplet(1,2,4), &
                     triplet(2,2,5),triplet(2,2,6), &
                     triplet(3,2,7),triplet(3,2,8) ], [ 2,3 ] )
      Print 1, Reduce(a,tadd)
      Print 1, Reduce(a,tadd,1)
      Print 1, Reduce(a,tadd,a%i/=2)
      Print 1, Reduce(Array=a,Dim=2,Operation=tadd)
      Print 1, Reduce(a, Mask=a%i/=2, Dim=1, Operation=tadd, Identity=triplet(0,0,0))
    1 Format(1x,6('triplet(',I0,',',I0,',',I0,')',:,'; '))
    End Program
    
    上記コードは以下を出力します
     triplet(12,12,33)
     triplet(2,4,7); triplet(4,4,11); triplet(6,4,15)
     triplet(8,8,22)
     triplet(6,6,15); triplet(6,6,18)
     triplet(2,4,7); triplet(0,0,0); triplet(6,4,15)
    
  • [7.0] 組込みのATOMICサブルーチンATOMIC_ADDATOMIC_ANDATOMIC_CASATOMIC_FETCH_ADDATOMIC_FETCH_ANDATOMIC_FETCH_ORATOMIC_FETCH_XORATOMIC_OR、及びATOMIC_XORは、高度な共配列プログラミングで説明されています。
  • [7.1] 個別集約サブルーチンCO_BROADCASTCO_MAXCO_MINCO_REDUCE、およびCO_SUMは、高度な共配列プログラミングで説明されています。
  • [7.0] 組込み関数COSHAPEEVENT_QUERYFAILED_IMAGESGET_TEAMIMAGE_STATUSSTOPPED_IMAGES、およびTEAM_NUMBER、および組み込み関数NUM_IMAGES、及びTHIS_IMAGEは、高度な共配列プログラミングで説明されています。
© 譌・譛ャ繝九Η繝シ繝。繝ェ繧ォ繝ォ繧「繝ォ繧エ繝ェ繧コ繝�繧コ繧ー繝ォ繝シ繝玲�ェ蠑丈シ夂、セ 2025
Privacy Policy  /  Trademarks